import unittest
import time
import os
from Report.HTMLTestRunner import HTMLTestRunner       #导入第三方库   可以直接生成html报告


class run():
    def runtest(self):                            #执行所有自动化测试用例
        case_path = "test_Case\\"  #定义一个变量 自动化测试用例执行路径    . 代表当前路径下   \\ 相对路径
        result = ".\\Report\\"                    #定义一个变量   存放自动化测试报告
        test_case = self.Creatsuite(case_path)    #定义一个变量 调用Creatsuite方法 拿到所有test自动化用例

        #获取系统当前时间
        now = time.strftime('%Y-%m-%d-%H_%M_%S', time.localtime(time.time()))   #定义一个变量 获取精准时间  年月日 时分秒
        day = time.strftime('%Y-%m-%d', time.localtime(time.time()))            #定义一个变量 获取大致时间  年月日


        tdresult = result + day           #定义一个变量  自动化测试报告存放路径 + 时间        支持相对路径

        if not os.path.exists(tdresult):  #判断result这个路径下是否存在 day 今天这个日期的路径   如果不存在
            os.makedirs(tdresult)         #就创建一个保存路径

        filename = tdresult + "\\" + now + "_result.html"     #定义一个变量 等于存放的文件名字  \\代表路径结束   时间  后缀
        fp = open(filename, 'wb')                             #定义一个变量   打开文件  以二进制 写流的形式  写入内容

        #定义测试报告
        runner = HTMLTestRunner(stream=fp,title='测试报告',description='执行情况：')   #定义一个变量  导入第三方库  可以直接生成html报告
                                       #测试报告 执行情况    文本可以修改
        runner.run(test_case)          #运行测试用例  通过利用HTMLTestRunner中的run方法 执行 调用Creatsuite方法 拿到的所有test自动化用例
        fp.close()                     #关闭报告文件


    def Creatsuite(self,case_path):     #用这个方法找到了指定路径下的所有py文件的自动化用例
        suites = unittest.defaultTestLoader.discover(        #测试套件  用例会返回  集中存放自动化测试用例的
            start_dir=case_path,        #确定用例的路径
            pattern='*.py',             # * 代表不管是什么名字 只要是.py 结尾的   都找到
            top_level_dir=None          #用例路径传的是顶层路径 没有间隔   就传参数 None
        )
        return suites                  #谁调用方法    就返回给谁


if __name__ == "__main__":             #入口函数    从这里开始执行
    run().runtest()

